<script>
	export default {
		onLaunch: function() {
			uni.setStorageSync('dev_config', { ENV_MODE: 'prod' })
			console.log('App Launch')
			
			// 检查登录状态
			this.$store.dispatch('auth/checkLoginStatus').then(() => {
				// 登录状态检查完成后，初始化位置服务
				this.initLocationService()
			}).catch(() => {
				// 即使登录检查失败，也先获取位置（但不上传）
				this.initLocationServiceWithoutUpload()
			})
		},
		onShow: function() {
			console.log('App Show')
			// 应用显示时更新位置
			this.updateLocation()
			// 重新启动定时位置上报
			const isLoggedIn = this.$store.getters['auth/isLoggedIn']
			if (isLoggedIn) {
				this.$store.dispatch('location/startAutoUpload')
			}
		},
		onHide: function() {
			console.log('App Hide')
			// 小程序进入后台时停止定时位置上报以节省资源
			this.$store.dispatch('location/stopAutoUpload')
		},
		methods: {
			// 初始化位置服务（已登录状态）
			async initLocationService() {
				try {
					console.log('开始获取位置信息（已登录）...')
					
					// 获取位置
					const location = await this.$store.dispatch('location/updateLocationStatus')
					console.log('位置获取完成:', location)
					
					// 检查是否有有效的登录token
					const isLoggedIn = this.$store.getters['auth/isLoggedIn']
					const token = this.$store.getters['auth/token']
					
					if (isLoggedIn && token && location && !location.isDefault) {
						// 自动上传位置到后端
						const uploadResult = await this.$store.dispatch('location/uploadLocation', {
							deviceType: 'wxapp',
							source: 'auto_init'
						})
						console.log('位置上传结果:', uploadResult)
						
						// 初始化实时推送
						await this.$store.dispatch('location/initRealtimePush')
						
						// 启动定时位置上报
						await this.$store.dispatch('location/startAutoUpload')
						console.log('定时位置上报已启动')
					} else {
						console.log('用户未登录或位置无效，跳过上传')
					}
					
				} catch (error) {
					console.error('位置初始化失败:', error)
				}
			},
			
			// 初始化位置服务（未登录状态）
			async initLocationServiceWithoutUpload() {
				try {
					console.log('开始获取位置信息（未登录）...')
					
					// 只获取位置，不上传
					const location = await this.$store.dispatch('location/updateLocationStatus')
					console.log('位置获取完成（未上传）:', location)
					
				} catch (error) {
					console.error('位置获取失败:', error)
				}
			},
			
			// 更新位置信息
			async updateLocation() {
				try {
					// 静默更新位置
					const location = await this.$store.dispatch('location/getCurrentLocation')
					
					// 检查登录状态后再上传
					const isLoggedIn = this.$store.getters['auth/isLoggedIn']
					const token = this.$store.getters['auth/token']
					
					if (isLoggedIn && token && location && !location.isDefault) {
						// 自动上传到后端
						await this.$store.dispatch('location/uploadLocation', {
							deviceType: 'wxapp',
							source: 'auto_update'
						})
						
						// 实时推送位置更新
						await this.$store.dispatch('location/pushLocationUpdate')
					} else {
						console.log('用户未登录或位置无效，跳过位置上传')
					}
				} catch (error) {
					console.log('位置更新失败:', error)
				}
			},
			
			// 用户登录成功后调用
			async onUserLoggedIn() {
				try {
					console.log('用户登录成功，开始上传位置...')
					
					// 获取当前位置
					const currentLocation = this.$store.getters['location/currentLocation']
					
					if (currentLocation && !currentLocation.isDefault) {
						// 上传当前位置
						const uploadResult = await this.$store.dispatch('location/uploadLocation', {
							deviceType: 'wxapp',
							source: 'login_upload'
						})
						console.log('登录后位置上传结果:', uploadResult)
						
						// 初始化实时推送
						await this.$store.dispatch('location/initRealtimePush')
						
						// 启动定时位置上报
						await this.$store.dispatch('location/startAutoUpload')
					}
				} catch (error) {
					console.error('登录后位置上传失败:', error)
				}
			}
		}
	}
</script>

<style lang="scss">
	/*每个页面公共css */
	@import "uni.scss";
</style>
